클라이언트 디렉토리와 화면 구조 이해하기

정적 자원과 화면 파일의 위치를 URL에 연결하고, 공통 자원의 관리 지점을 찾습니다.

QCN

파일 경로와 요청 URL

  • 모듈의 wwwroot 디렉토리 구조와 웹 브라우저에서 요청하는 경로와 어떻게 매칭되는지 이해합니다.
  • 프론트엔드 자원(assets, lib, css, js, img)의 역할을 파악합니다.
  • 화면을 구성하는 핵심 디렉토리인 view의 구조를 학습합니다.
  • 공통 웹 루트와 모듈별 공개 경로를 구분합니다.
QCN

wwwroot 디렉토리: 모듈의 기본 디렉토리 (1/2)

wwwroot는 클라이언트 측의 모든 로직과 리소스가 이 디렉토리를 중심으로 구성됩니다.

$(HANDSTACK_SRC)/2.Modules/[모듈 ID]/wwwroot

  • assets/

  • lib/

  • css/

  • js/

QCN

wwwroot 디렉토리: 모듈의 기본 디렉토리 (2/2)

  • img/

http://localhost:8421/[모듈 ID]/**.*

QCN

assets/ - 공용 정적 리소스

모듈 공통 또는 외부에서 사용하는 정적 리소스를 저장하는 공간입니다.

  • 예시
    • 미디어, SVG 파일, 플러그인 관련 리소스
  • 특징
    • 다른 모듈이나 페이지에서도 공통으로 참조될 수 있도록 구성합니다.
    • 범용적으로 사용되는 자산을 배치하여 재사용성을 높입니다.
QCN

lib/ - 외부 라이브러리

모듈 내에서 사용중인 외부 프론트엔드 라이브러리의 원본 파일을 저장합니다.

  • 예시
    • /lib/jquery/jquery.min.js
    • /lib/bootstrap/css/bootstrap.min.css
  • 특징
    • 주로 cdnjs, jsdelivr 같은 CDN에서 제공하는 라이브러리로 구성됩니다.
    • $(HANDSTACK_SRC)/libman.json 파일을 통해 관리됩니다.
QCN

css/ - 스타일 시트

모듈 내에서 적용되는 CSS 파일을 저장합니다.

  • 예시
    • /css/site.css (전역 스타일)
    • /[모듈 ID]/css/module.css (모듈별 스타일)
  • 특징
    • 전역 스타일과 특정 모듈/페이지 스타일로 나누어 관리할 수 있습니다.
    • 사용자 정의 테마나 디자인 커스터마이징에 활용됩니다.
QCN

js/ - 공통 스크립트 (1/3)

모듈 내에서 클라이언트 측 기능을 담당하는 공통 JavaScript 파일을 저장합니다.

QCN

js/ - 공통 스크립트 (2/3)

  • 예시
    • /js/module-user.js
    • /js/utilities.js
QCN

js/ - 공통 스크립트 (3/3)

  • 특징
    • 여러 화면에서 공통으로 사용하는 유틸리티 함수나 로직을 포함합니다.
    • 수동으로 관리하거나 커스터마이징된 라이브러리를 직접 포함할 수 있습니다.
QCN

img/ - 이미지 파일

모듈 내에서 UI에 사용되는 로고, 아이콘, 배경 등의 이미지 파일을 보관합니다.

  • 예시
    • /img/logo.png
    • /img/empty-state.svg
  • 특징
    • 정적 콘텐츠로서 페이지 로딩 시 브라우저에 직접 제공되는 시각 자료입니다.
QCN

wwwroot 모듈의 wwwroot 디렉토리: 웹의 기본 디렉토리 (1/2)

wwwroot는 클라이언트 측의 공통 로직과 리소스가 이 디렉토리를 중심으로 구성됩니다.

$(HANDSTACK_SRC)/2.Modules/wwwroot/wwwroot

  • 클라이언트 디렉토리 구조/

  • font/

  • sample/

QCN

wwwroot 모듈의 wwwroot 디렉토리: 웹의 기본 디렉토리 (2/2)

  • uicontrols/

http://localhost:8421/**.*

QCN

syn.js 공통 스크립트 디렉토리 및 번들링

$(HANDSTACK_SRC)/1.WebHost/ack/wwwroot/assets/src

cd $(HANDSTACK_SRC)/1.WebHost/ack
npm i
gulp

$(HANDSTACK_SRC)/1.WebHost/ack/wwwroot/js 디렉토리에 번들링

QCN

syn.uicontrols.js 공통 스크립트 디렉토리 구조

$(HANDSTACK_SRC)/2.Modules/wwwroot/wwwroot/uicontrols

cd $(HANDSTACK_SRC)/2.Modules/wwwroot
npm i
gulp

$(HANDSTACK_SRC)/2.Modules/wwwroot/wwwroot/js 디렉토리에 번들링

QCN

view/ - 화면의 핵심 (1/2)

모듈별 업무 화면을 구성하는 HTML과 JavaScript 파일을 저장합니다.

  • 예시

    • /view/TST/TST010.html (화면의 구조)
    • /view/TST/TST010.js (화면의 동작)
  • 특징

    • HTML 파일과 JS 파일이 동일한 이름으로 쌍을 이룹니다.
    • 서버 기술에 의존하지 않는 순수 HTML(Plain HTML)과 Vanilla JavaScript로 개발하여 명확한 역할 분리를 지향합니다.
QCN

view/ - 화면의 핵심 (2/2)

QCN

오픈소스 라이브러리 관리 (1/2)

HandStack은 libman을 사용하여 프론트엔드 라이브러리를 관리합니다.

  • 설정 파일: $(HANDSTACK_SRC)/libman.json

  • 설치 위치: $(HANDSTACK_SRC)/2.Modules/wwwroot/wwwroot/lib

개발 PC에서 $(HANDSTACK_SRC) 디렉토리에서 명령 프롬프트로 libman restore 를 권장합니다.

QCN

오픈소스 라이브러리 관리 (2/2)

{
  "version": "1.0",
  "defaultProvider": "cdnjs",
  "libraries": [
    {
      "library": "jquery@3.7.1",
      "destination": "wwwroot/lib/jquery"
    },
    {
      "library": "bootstrap@5.3.3",
      "destination": "wwwroot/lib/bootstrap"
    }
  ]
}
QCN

디렉토리 구조 탐험하기

이제 직접 파일 탐색기를 열어 디렉토리 구조를 열고 파일을 만들어 브라우저에서 직접 확인해봅시다.

  • $(HANDSTACK_SRC)/1.WebHost/ack/wwwroot 경로로 이동합니다.
  • $(HANDSTACK_SRC)/2.Modules/[모듈 ID]/wwwroot 경로로 이동합니다.
  • assets, css, js, view 등의 디렉토리와 그 안의 파일들을 열어보며 오늘 배운 내용과 비교해 보세요.
  • 특히 view/[모듈 ID]/ 폴더 안의 HTML, JS 파일 쌍을 확인해보세요.
QCN

잠깐, 구분해 보기

브라우저에 내려간 JavaScript를 난독화하면 접근 권한까지 보호될까요?

QCN

view 디렉토리 보안 (1/3)

운영 환경에서 /view 경로에 있는 업무 화면에 대한 보안을 위해 다음의 항목을 권장합니다.

  • HTML·JavaScript 난독화는 소스 보호 보조 수단입니다. 접근 제어를 대체하지 않습니다.

  • appsettings.json 설정으로 공개 접근 제한

  • 업무 모듈의 사용자 권한에 따라 조회 메뉴에 따른 접근을 제한하도록 개발

QCN

view 디렉토리 보안 (2/3)

{
  "IsPermissionRoles": true,
  "PermissionRoles": [
    {
        "RoleID": "Developer",
        "ModuleID": "wwwroot",
        "ApplicationID": "view",
        "ProjectID": ".*",
        "TransactionID": ""
    },
    {
        "RoleID": "User",
        "ModuleID": "wwwroot",
        "ApplicationID": "view",
QCN

view 디렉토리 보안 (3/3)

        "ProjectID": "(BOD|TST)",
        "TransactionID": ".*"
    }
  ]
}
QCN

경로를 찾는 기준

  • assets·lib·css·js·img와 view의 역할을 구분합니다.
  • 화면 HTML·JS 쌍, 번들 소스와 결과물 위치를 찾습니다.
  • 리소스 공개 범위와 서버 권한 검증을 별도로 확인합니다.
QCN

발표: 첫 화면의 목표를 말한 뒤 핵심 개념과 예제로 진행합니다. 확인 질문 뒤에는 답할 시간을 주고, 마지막 완료 기준을 남겨 질문을 받습니다. 발표 구성 참고: MIT OpenCourseWare, Patrick Winston, How to Speak (2018), https://ocw.mit.edu/courses/res-tll-005-how-to-speak-january-iap-2018/pages/how-to-speak/

질문 후 잠시 기다립니다. 답이 없으면 앞에서 본 예제를 다시 가리킵니다. 확인할 답: 난독화는 읽기 난이도를 높일 뿐입니다. 서버가 거래와 데이터 접근 권한을 검증해야 합니다. 다음 주제로 넘어가기 전에 차이를 청중의 표현으로 한 번 확인합니다.

이어지는 코드 조각입니다. 앞뒤 페이지를 순서대로 읽으며 전체 예제의 일부임을 설명합니다.

이어지는 코드 조각입니다. 앞뒤 페이지를 순서대로 읽으며 전체 예제의 일부임을 설명합니다.

질문을 받는 동안 이 확인 기준을 화면에 남깁니다. 청중이 자신의 업무에 적용할 다음 행동 하나를 고르게 합니다.